
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>tomcat如何优化？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>tomcat如何优化？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">架构</div>
          <div class="card-question">在Tomcat的整体架构中，Catalina和Coyote分别扮演什么角色？它们之间是如何协作的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">架构</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Catalina是Tomcat的核心Servlet容器，负责管理整个Servlet的生命周期，包括加载、初始化、服务请求和卸载。Coyote是Tomcat的HTTP连接器，负责解析和处理HTTP请求。Coyote通过连接器将外部请求转发到Tomcat内部的Servlet容器（Catalina）进行处理。</div>
          </div>
          <div class="card-source">来源: Tomcat 的整体架构</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在Tomcat集群环境中，文档提到了哪两种会话复制机制？它们在适用场景上有什么不同？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档提到了DeltaManager和BackupManager两种机制。DeltaManager进行实时复制，将每次会话变更同步到所有集群实例，适用于节点较少的集群。而BackupManager进行异步复制，只将状态复制到指定的备份节点以减少网络开销，因此更适用于大规模集群。</div>
          </div>
          <div class="card-source">来源: Tomcat 集群和负载均衡 -> 3、Tomcat 会话管理 -> 3.1 会话复制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">什么是“会话粘性”（Sticky Sessions）？根据文档，它存在哪些优点和缺点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">会话粘性是一种通过负载均衡器将同一用户的请求始终分发到同一个Tomcat实例的技术。它的优点是避免了会话复制带来的开销，从而提高性能。缺点是增加了单点故障的风险，并且可能导致负载不均衡。</div>
          </div>
          <div class="card-source">来源: Tomcat 集群和负载均衡 -> 3、Tomcat 会话管理 -> 3.3 Sticky Sessions</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">原则</div>
          <div class="card-question">根据性能优化原则，在进行任何优化操作之前，首先需要进行哪两个步骤？它们各自的目标是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">原则</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在进行任何优化之前，首先需要进行基准测试（Benchmarking）和性能分析（Profiling）。基准测试的目标是了解当前系统的性能表现，识别性能瓶颈，并为优化设定目标。性能分析的目标是使用专业工具深入了解应用程序的性能特征，识别代码层面的热点和瓶颈。</div>
          </div>
          <div class="card-source">来源: 性能优化的原则 -> 1. 基准测试与性能分析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">配置</div>
          <div class="card-question">在优化JVM参数时，为什么建议将初始堆大小(-Xms)和最大堆大小(-Xmx)设置为相同的值？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">配置</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">建议将初始堆大小（-Xms）和最大堆大小（-Xmx）设置为一致，是为了避免在应用运行过程中因堆内存需求变化而进行频繁的堆扩展操作，这种扩展操作会带来性能开销。</div>
          </div>
          <div class="card-source">来源: 配置优化 -> 1. JVM 参数优化 -> 1.1 堆内存（Heap Memory）配置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中介绍了四种常见的负载均衡算法，请问“IP哈希”算法是如何工作的，它特别适用于哪种应用场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“IP哈希”（IP Hash）算法是根据请求来源的IP地址计算哈希值，然后将请求分发到固定的实例。这种策略的特点是可以将来自同一用户的请求始终路由到同一个服务器，因此特别适用于需要保持会话状态的应用。</div>
          </div>
          <div class="card-source">来源: Tomcat 集群和负载均衡 -> 2、负载均衡策略 -> 2.1 常见负载均衡算法</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">Tomcat的Connector组件支持多种I/O模型，为了提高高并发场景下的处理效率，文档推荐了哪两种连接器？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">为了提高高并发场景下的I/O处理能力，文档推荐使用NIO（Non-blocking I/O）连接器（org.apache.coyote.http11.Http11NioProtocol）或APR（Apache Portable Runtime）连接器（org.apache.coyote.http11.Http11AprProtocol）。</div>
          </div>
          <div class="card-source">来源: 配置优化 -> 2. 连接器（Connector）优化 -> 2.3 NIO 和 APR 连接器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">在日志管理方面，相比Tomcat默认的JUL框架，Log4j2的一个显著性能优势是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">相比JUL，Log4j2的一个显著性能优势是其内置的异步日志功能（AsyncLogger）。该功能可以提高日志记录的性能，并减少日志操作对应用程序主线程的阻塞。</div>
          </div>
          <div class="card-source">来源: 日志管理 -> 1.1 日志框架选择 -> Log4j2</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">监控</div>
          <div class="card-question">要全面评估Tomcat的运行状态，需要监控哪些关键性能指标？请至少列出四项。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">监控</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的关键监控指标包括：CPU使用率、内存使用情况、垃圾回收频率、线程池状态、请求响应时间以及错误率。</div>
          </div>
          <div class="card-source">来源: 监控策略 -> 2.2 监控指标配置</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
